/*
兴安黑熊在高中学习数学时，曾经知道这样一个公式：f(n)=1^2+2^2+3^2+.......+n^2,这个公式是可以化简的，化简后的结果是啥它却忘记了，也许刚上大二的你能记得。
现在的问题是想要计算f(n)对1007取余的值，你能帮帮他吗？
Input
输入数据有多组（不超过100组），每组一个数n. (1<=n <=1,000,000,000).
Output
输出f(n)对1007取余的值。
Sample Input
3
4
100
Sample Output
14
30
1005
*/
#include <iostream>
using namespace std;
typedef long long LL;
void exgcd(LL a, LL b, LL &x, LL &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return;
    }
    exgcd(b, a % b, x, y);
    int t = x;
    x = y;
    y = t - (a / b) * y;
}
// int main()
// {
//     // f(n) = 1^2+2^2+3^2+.......+n^2
//     // f(n) = 1/6 * n * (n+1) * (2n+1)
//     LL x, y, n, ans;
//     while (cin >> n)
//     {
//         // inv(b,p)为b对p求逆元的解
//         // (a / b) % p = (a * inv(b,p) ) % p = (a % p * inv(b,p) % p) % p
//         // (1 / 6) % 1007 = (1 * inv(6,1007) ) % 1007 = (a % p * inv(b,p) % p) % p
//         exgcd(6, 1007, x, y);
//         x = (x + 1007) % 1007;
//         // (a*b) % c=((a%c)*(b%c)) % c
//         ans = (n * (n + 1)) % 1007;
//         ans = (ans * (2 * n + 1)) % 1007;
//         ans = (ans * x) % 1007;
//         cout << ans << endl;
//     }
//     return 0;
// }

int main()
{
    long long n, ans = 1, num;
    while (cin >> n)
    {
        ans = n * (n + 1);
        ans = ans / 2;
        if (ans % 3 == 0)
        {
            ans = ans / 3;
            num = (ans % 1007) * ((2 * n + 1) % 1007);
            num = num % 1007;
        }
        else
        {
            num = (2 * n + 1) / 3;
            num = (ans % 1007) * num % 1007;
            num = num % 1007;
        }
        cout << num << endl;
    }

    return 0;
}
